import java.util.Arrays;

public class Test {
    /*面试题 17.04. 消失的数字:
    数组nums包含从0到n的所有整数，但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗？*/
    public static int missingNumber(int[] nums) {
        int ret = 0;
        for(int i = 0; i < nums.length; i++){
            ret ^= nums[i]; //先按位与所有的数组元素
            ret ^= i; //再与当前缺少了一个元素的数组进行按位与
        }
        ret ^= nums.length; //再与原本数组长度的最后一个元素按位与
        return ret;
    }

    /* 189. 轮转数组
    给你一个数组，将数组中的元素向右轮转 k个位置，其中k是非负数。
    示例 1:
    输入: nums = [1,2,3,4,5,6,7], k = 3
    输出: [5,6,7,1,2,3,4]
    向右轮转 1 步: [7,1,2,3,4,5,6]
    向右轮转 2 步: [6,7,1,2,3,4,5]
    向右轮转 3 步: [5,6,7,1,2,3,4]*/
    public static int[] rotate(int[] nums2, int k) {
        int length = nums2.length;
        //定义一个新数组用来接收排序的元素
        int[] ret = new int[length];
        for(int i = 0; i < length; i++){
            ret[(i+k)%length] = nums2[i];
        }
        for(int i = 0; i < ret.length; i++){
            nums2[i] = ret[i]; //因为要输出nums[]，所以要再吧新元素赋给nums[]
        }
        return nums2;
    }

    public static void main(String[] args) {
        int[] nums = {3,0,1};
        System.out.println(missingNumber(nums));

        int[] nums2 = {1,2,3,4,5,6,7};
        System.out.println(Arrays.toString(rotate(nums2,3)));;
    }
}
